package com.zenagro.domain.zenagro;

import java.math.BigDecimal;
import java.sql.*;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

import org.openxava.annotations.*;

import com.zenagro.domain.zenagro.Cultivo;
import com.zenagro.domain.zenagro.Agricultor;
import com.zenagro.domain.zenagro.AguaRiego;
import com.zenagro.domain.zenagro.base.*;

/**
 *
 * <p>Title: Finca</p>
 *
 * <p>Description: Domain Object describing a Finca entity</p>
 *
 */
@Entity (name="Finca")
@Table (name="finca")
@View(name="reference", members="referencia")
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Finca extends FileIdentificable{

    
	@Required
    @Column(name="referencia", nullable=false,  unique=true)//length=45,
    private String referencia;

	@Required
    @Column(name="direccion_descarga",   nullable=false,  unique=false)// length=200,
    private String direccionDescarga;

    @Column(name="telefono",    nullable=true,  unique=false)
    private Long telefono;

    @Required
    @Column(name="num_tanques_fertilizantes",    nullable=false,  unique=false)
    private Integer numTanquesFertilizantes;

    @Required
    @Column(name="capacidad_tanque",    nullable=false,  unique=false)
    private Integer capacidadTanque;

    @Required
    @Column(name="total_capacidad_solucion",    nullable=false,  unique=false)
    private Integer totalCapacidadSolucion;

    @Required
    @Column(name="porcentaje_mezcla_agua",    nullable=false,  unique=false)
    private Integer porcentajeMezclaAgua;

    @Required
    @Column(name="pozo_en_finca",    nullable=false,  unique=false)
    private Boolean pozoEnFinca;

    @Required
    @Column(name="superficie",    nullable=false)
    private BigDecimal superficie;
    
    @ManyToOne //(fetch=FetchType.LAZY ,optional=false) Parece que el lazy da algun problema con JPaCloner!!!!
    @JoinColumn(name="agricultor_id", referencedColumnName = "id", nullable=false,  unique=false  )
    @ReferenceView ("reference") 
    private Agricultor agricultor;
    
    
    @ManyToOne //(fetch=FetchType.LAZY ,optional=false) Parece que el lazy da algun problema con JPaCloner!!!!
    @JoinColumn(name="agua_riego_id", referencedColumnName = "id", nullable=false,  unique=false  )
    private AguaRiego aguaRiegoId;
    
    @OneToMany (targetEntity=com.zenagro.domain.zenagro.Cultivo.class, fetch=FetchType.LAZY, mappedBy="finca", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <Cultivo> cultivos = new HashSet<Cultivo>(); 
   

    @ManyToOne //(fetch=FetchType.LAZY ,optional=false) Parece que el lazy da algun problema con JPaCloner!!!!
    @JoinColumn(name="zona_reparto_id", referencedColumnName = "id", nullable=false,  unique=false  )
    @ReferenceView ("reference") 
    private ZonasReparto zonaReparto;
    
    public Finca() {
    }

        
    public String getReferencia() {
        return referencia;
    }
	
    public void setReferencia (String referencia) {
        this.referencia =  referencia;
    } 

    public String getDireccionDescarga() {
        return direccionDescarga;
    }
	
    public void setDireccionDescarga (String direccionDescarga) {
        this.direccionDescarga =  direccionDescarga;
    } 

    public Long getTelefono() {
        return telefono;
    }
	
    public void setTelefono (Long telefono) {
        this.telefono =  telefono;
    } 

    public Integer getNumTanquesFertilizantes() {
        return numTanquesFertilizantes;
    }
	
    public void setNumTanquesFertilizantes (Integer numTanquesFertilizantes) {
        this.numTanquesFertilizantes =  numTanquesFertilizantes;
    } 

    public Integer getCapacidadTanque() {
        return capacidadTanque;
    }
	
    public void setCapacidadTanque (Integer capacidadTanque) {
        this.capacidadTanque =  capacidadTanque;
    } 

    public Integer getTotalCapacidadSolucion() {
        return totalCapacidadSolucion;
    }
	
    public void setTotalCapacidadSolucion (Integer totalCapacidadSolucion) {
        this.totalCapacidadSolucion =  totalCapacidadSolucion;
    } 
    
  
    public Integer getPorcentajeMezclaAgua() {
        return porcentajeMezclaAgua;
    }
	
    public void setPorcentajeMezclaAgua (Integer porcentajeMezclaAgua) {
        this.porcentajeMezclaAgua =  porcentajeMezclaAgua;
    } 
    
    
    
    public BigDecimal getSuperficie() {
		return superficie;
	}


	public void setSuperficie(BigDecimal superficie) {
		this.superficie = superficie;
	}


	public Agricultor getAgricultor () {  //
    	return agricultor;
    }
	
    public void setAgricultor (Agricultor agricultorId) {
    	this.agricultor = agricultorId;//this.agricultorId = agricultor;
    }
    public AguaRiego getAguaRiegoId () {  //
    	return aguaRiegoId;
    }
	
    public void setAguaRiegoId (AguaRiego aguaRiegoId) {
    	this.aguaRiegoId = aguaRiegoId;//this.aguaRiegoId = aguaRiego;
    }

    public Set<Cultivo> getCultivos() {
        if (cultivos == null){
            cultivos = new HashSet<Cultivo>();
        }
        return cultivos;
    }

    public void setCultivos (Set<Cultivo> cultivos) {
        this.cultivos = cultivos;
    }	
    
    public void addCultivos(Cultivo cultivo) {
    	getCultivos().add(cultivo);
    }
  public Boolean getPozoEnFinca() {
        return pozoEnFinca;
    }
	
    public void setPozoEnFinca (Boolean pozoEnFinca) {
        this.pozoEnFinca =  pozoEnFinca;
    }


	public ZonasReparto getZonaReparto() {
		return zonaReparto;
	}


	public void setZonaReparto(ZonasReparto zonaReparto) {
		this.zonaReparto = zonaReparto;
	} 
    
    

}
